package edu.unice.simul.controleur.initialisation;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;

import edu.unice.simul.conf.GeneralSettings;
import edu.unice.simul.controleur.ConfigControleur;
import edu.unice.simul.modele.initialisation.Initialisation;
import edu.unice.simul.util.Dim;
import edu.unice.simul.vue.initialisation.InitialisationFrame;
import edu.unice.simul.vue.initialisation.modes_dessin.BlockType;

/**
 * Contrôleur de l'initialisation (déssin de la pièce).
 * 
 * @author Romain Ciaccafava
 * 
 */
public class InitialisationControleur implements InitialisationInterface {
	private Initialisation model;
	private InitialisationFrame view;

	public InitialisationControleur() {
		Dim dim = new Dim(GeneralSettings.WIDTH, GeneralSettings.HEIGHT);
		view = new InitialisationFrame(this, dim);
		model = new Initialisation(dim);
		model.addPieceListener(view.getListener());
	}

	/**
	 * Lancement de la simulation
	 */
	@Override
	public void demarerSimulation() throws Exception {
		if (model.vide()) {
			throw new Exception("Vous devez au moins ajouter un humain.");
		}
		new ConfigControleur(model.getWorld());
	}

	/**
	 * Affecte un type de block à une position sur la grille
	 * 
	 * @param pos
	 *          position du block sur la grille
	 * @param blockType
	 *          type du block à placer
	 */
	@Override
	public void modifierBlockType(Dim pos, BlockType blockType) {
		model.modifierBlock(pos, blockType);
	}

	/**
	 * Efface la grille. Permet de redémarer le dessin à zéro
	 */
	@Override
	public void clear() {
		model.clearWorld();
	}

	/**
	 * Sauvegarde la pièce
	 * 
	 * @param file
	 *          fichier dans lequel on doit sauvegarder le dessin
	 */
	public void save(File file) throws FileNotFoundException, IOException {
		model.save(file);
	}

	/**
	 * Chargement de la pièce
	 * 
	 * @param file
	 *          fichier dans lequel est sérialisé le dessin
	 */
	public void load(File file) throws FileNotFoundException, IOException,
			ClassNotFoundException {
		model.load(file);
	}
}
